package com.xdcplus.web.mapper.tool;

import com.xdcplus.mp.mapper.IBaseMapper;
import com.xdcplus.web.common.pojo.entity.tool.ToolInfo;
import com.xdcplus.web.common.pojo.query.GetToolByWoCodeAndOpeAndUnitTypeQuery;
import com.xdcplus.web.common.pojo.query.tool.ToolInfoQuery;
import com.xdcplus.web.common.pojo.vo.alarm.ToolSimpleVo;
import com.xdcplus.web.common.pojo.vo.tool.ToolInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 设备信息(ToolInfo)表数据库访问层
 *
 * @author Fish.Fei
 * @since 2023-02-03 15:52:13
 */
public interface ToolInfoMapper extends IBaseMapper<ToolInfo> {

    /**
     * 查询设备信息(ToolInfo)
     *
     * @param toolInfoQuery 设备信息(ToolInfo)查询
     * @return {@link List<ToolInfo>}
     */
    List<ToolInfo> queryToolInfo(ToolInfoQuery toolInfoQuery);


    ToolInfo queryToolInfoByToolCode(String toolCode);


    List<ToolInfo> getByRootToolId(Long rootToolId);

    /**
     * 根据工单号,工序、设备类型查询设备
     * @param getToolByWoCodeAndOpeAndUnitTypeQuery
     * @return
     */
    List<ToolInfo> getToolByWoCodeAndOpeAndUnitType(GetToolByWoCodeAndOpeAndUnitTypeQuery getToolByWoCodeAndOpeAndUnitTypeQuery);


    /**
     * 查询主设备信息，包含满足子设备的查询条件：设备编号、设备名称、设备类型、工序、线别查询
     * @param toolInfoQuery
     * @return
     */
    List<ToolInfo> pageToolInfoForTree(ToolInfoQuery toolInfoQuery);


    /**
     * @Description 更新主设备id查询子设备
     * @Author Devin.sang
     * @Date  2023/5/5 9:45
     */
    List<ToolInfo> queryToolInfoByParentIds(@Param("parentIds") List<Long> parentIds);

    /**
     * 根据设备群组查询设备
     * @param opeCode 设备群组Code
     * @return
     */
    List<ToolInfo> getToolByOpeCode(String opeCode);

    /**
     * @Description 查询列表中设备存在的
     * @Author Devin.sang
     * @Date  2023/5/5 18:30
     */
    List<String> getToolCodeExists(@Param("toolCodes") List<String> toolCodes);

    /**
     * @Description 线别查询
     * @Author Devin.sang
     * @Date  2023/5/12 11:00
     */
    List<ToolInfo> getToolByFactoryId(@Param("factoryId") String factoryId);

    /**
     * @Description 设备编号查询
     * @Author Devin.sang
     * @Date  2023/5/7 11:30
     */
    List<ToolInfo> queryToolInfoByToolCodes(@Param("toolCodes") List<String> toolCodes);

    /**
     * @Description 线别查询
     * @Author Devin.sang
     * @Date  2023/5/12 11:00
     */
    List<ToolInfo> getToolByBayId(@Param("bayId") String bayId);

    List<ToolInfo> getToolByOpeCodes(@Param("opeCodes") List<String> opeCodes);


    List<ToolInfo> getToolByOpeAndTypeCode(@Param("opeCode") String opeCode, @Param("toolTypeCode") String toolTypeCode);

    List<ToolInfoVO> getToolInfoByClassify(@Param("toolClassifyId") Long toolClassifyId);

    List<ToolSimpleVo> queryCurrentAndChildByFactoryId(Long factoryId);
    

}
